import React from 'react';
import { notification } from 'antd';
import moment from 'moment';
import { Select, Checkbox, Radio } from 'antd';
const { Option } = Select;
//弹出通知提醒框
function openNotification(type, message) {
  notification.open({
    type: type,
    message: message,
    duration: 2,
  });
};
// 定时器实现 防抖（当持续触发事件时，一定时间段内没有再触发事件，事件处理函数才会执行一次，如果设定的时间到来之前，又一次触发了事件，就重新开始延时。 —— 将多次触发变成最后一次触发）
function debounce(func, wait = 1000) {
  var timer = null
  return function () {
    var that = this
    var args = arguments
    clearTimeout(timer)
    timer = setTimeout(() => {
      func.apply(that, args)
    }, wait)
  }
}

// 定时器实现 节流（当持续触发事件时，保证一定时间段内只调用一次事件处理函数。—— 将多次执行变成每个一段时间去执行）
function throttle(func, wait = 1000) {
  var timer = null
  return function () {
    var that = this
    var args = arguments
    if (!timer) {
      timer = setTimeout(() => {
        timer = null
        func.apply(that, args)
      }, wait)
    }
  }
}


// 生成随机字符串， 默认长度 32
function randomString(length = 32) {
  var str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  var result = ''
  for (let i = 0; i < length; i++) {
    result += str[Math.floor(Math.random() * str.length)]
  }
  return result
}

// 转时间戳
function getTime(temDate = new Date()) {
  var dateSource = new Date(moment(temDate).format('YYYY-MM-DD')).getTime()
  return dateSource
}

// 计算两个日期之间的日时分秒
function getDayTime(starDay, endDay) {
  let result = ''
  var startTime = new Date(starDay).getTime()
  var endTime = new Date(endDay).getTime()

  var temp = endTime - startTime   // 时间差

  // 获取 天
  var date = Math.floor(temp / (24 * 3600 * 1000))
  result += date > 0 ? date + ' 天 ' : ''
  // 获取 时
  var hours = Math.floor((temp - (24 * 3600 * 1000) * date) / (3600 * 1000))
  result += result.length > 0 ? (hours > 0 ? hours + ' 小时 ' : ' 0 小时 ') : (hours > 0 ? hours + ' 小时 ' : '')
  // 获取 分
  var min = Math.floor((temp - (24 * 3600 * 1000) * date - (3600 * 1000) * hours) / (60 * 1000))
  result += result.length > 0 ? (min > 0 ? min + ' 分 ' : ' 0 分 ') : (min > 0 ? min + ' 分 ' : '')
  // 获取 秒
  var sec = Math.floor((temp - (24 * 3600 * 1000) * date - (3600 * 1000) * hours - (60 * 1000) * min) / 1000)
  result += result.length > 0 ? (sec > 0 ? sec + ' 秒 ' : ' 0 秒 ') : (sec > 0 ? sec + ' 秒 ' : '')
  // console.log(result, '天时分秒-----------');
  if (result == '') return 0
  return result
}

// 时间戳转日时分秒
function getDayByTime(temp) {
  let result = ''

  // 获取 天
  var date = Math.floor(temp / (24 * 3600 * 1000))
  result += date > 0 ? date + ' 天 ' : ''
  // 获取 时
  var hours = Math.floor((temp - (24 * 3600 * 1000) * date) / (3600 * 1000))
  result += result.length > 0 ? (hours > 0 ? hours + ' 小时 ' : ' 0 小时 ') : (hours > 0 ? hours + ' 小时 ' : '')
  // 获取 分
  var min = Math.floor((temp - (24 * 3600 * 1000) * date - (3600 * 1000) * hours) / (60 * 1000))
  result += result.length > 0 ? (min > 0 ? min + ' 分 ' : ' 0 分 ') : (min > 0 ? min + ' 分 ' : '')
  // 获取 秒
  var sec = Math.floor((temp - (24 * 3600 * 1000) * date - (3600 * 1000) * hours - (60 * 1000) * min) / 1000)
  result += result.length > 0 ? (sec > 0 ? sec + ' 秒 ' : ' 0 秒 ') : (sec > 0 ? sec + ' 秒 ' : '')
  // console.log(result, '天时分秒-----------');
  if (result == '') return 0
  return result
}

// 获取两个日期之间的所有日期，返回数据
function getDayAll(starDay, endDay) {
  debugger

  console.log(starDay, endDay);
  console.log('starDay', new Date(moment(starDay).format('YYYY-MM-DD HH:mm:ss')))
  console.log('endDay', new Date(moment(endDay).format('YYYY-MM-DD HH:mm:ss')))

  var arr = [];
  var dates = [];

  // 设置两个日期UTC时间
  var db = new Date(starDay);
  var de = new Date(endDay);

  // 获取两个日期GTM时间
  var s = db.getTime() - 24 * 60 * 60 * 1000;
  var d = de.getTime() - 24 * 60 * 60 * 1000;

  // 获取到两个日期之间的每一天的毫秒数
  for (var i = s; i <= d;) {
    i = i + 24 * 60 * 60 * 1000;
    arr.push(parseInt(i))
  }

  // 获取每一天的时间  YY-MM-DD
  for (var j = 0; j < arr.length; j++) {
    var time = new Date(arr[j]);
    var year = time.getFullYear(time);
    var mouth = (time.getMonth() + 1) >= 10 ? (time.getMonth() + 1) : ('0' + (time.getMonth() + 1));
    var day = time.getDate() >= 10 ? time.getDate() : ('0' + time.getDate());
    var YYMMDD = year + '-' + mouth + '-' + day;
    dates.push(YYMMDD)
  }

  return dates
}
// 获取两个日期之间的月份，返回数据
function getMonthAll(starDay, endDay) {
  var dates = [];

  let s = new Date(starDay).getMonth() + 1
  let e = new Date(endDay).getMonth() + 1

  for (var i = s; i <= e; i++) {
    dates.push(i)
  }
  return dates
}

// 获取本月第一天
function getFirstDayOfTheMonth(temDate = new Date()) {
  const year = new Date(temDate).getFullYear();
  const month = new Date(temDate).getMonth();
  const dateString = moment(new Date(year, month, 1)).format('YYYY-MM-DD');
  console.log(dateString, 'getFirstDayOfTheMonth');
  return (dateString);
}
// 获取本月最后一天
function getLastDayOfTheMonth(temDate = new Date()) {
  const year = new Date(temDate).getFullYear();
  const month = new Date(temDate).getMonth();
  const dateString = new Date(year, month + 1, 0);
  console.log(dateString, 'getLastDayOfTheMonth');
  return (dateString);
}

//得到当前时间 2020-06-19 00：00：00
function getNowDate() {
  const temDate = new Date();
  const year = temDate.getFullYear();
  const month = temDate.getMonth() + 1;
  const date = temDate.getDate();
  const dateString = year + '-' + month + '-' + date + ' ' + '00:00:00';
  return (dateString);
}
//得到当前时间 2020-06-19
function getDate(date = new Date()) {
  return moment(date).format("YYYY-MM-DD")
}
//得到当前时间 分秒
function getDateHHMM(date = new Date()) {
  return moment(date).format("HH:mm")
}
//得到当前时间 年月
function getDateYYYYMM(date = new Date()) {
  return moment(date).format("YYYY-MM")
}
//得到当前时间 年周
function getDateYYYYwo(date = new Date()) {
  return moment(date).format("YYYY-wo")
}

//日期格式 转字符串
function getStringByDate(date = new Date(), format = 'YYYY-MM-DD') {
  return moment(date).format(format)
}

//转换时间 2020-06-19 00:00:00
function getDateHHMMYY_HHMMSS(date = new Date()) {
  return moment(date).format("YYYY-MM-DD HH:mm:ss")
}


//字符串转为时间  2020-06-19 00:00:00
function getDateByString(String) {
  return moment(String, "YYYY-MM-DD HH:mm:ss")
}
//生成Select的option
function getOptionList(data, name, valueField) {
  if (!data) {
    return [];
  }
  const options = [];
  data.map((item, index) => {
    options.push(
      <Option value={item[`${valueField}`]} key={index}>
        {item[`${name}`]}
      </Option>
    );
  });
  return options;
}

function getRadioList(data, name) {
  if (!data) {
    return [];
  }
  const radioOtion = []; // [<Option value="0" key="all_key">全部</Option>];
  data.map(item => {
    radioOtion.push(
      <Radio value={item.id} key={item.id}>
        {item[`${name}`]}
      </Radio>
    );
    return '';
  });

  return radioOtion;
}
function getCheckboxList(data) {
  if (!data) {
    return [];
  }
  const options = []; // [<Option value="0" key="all_key">全部</Option>];
  data.map(item => {
    options.push(
      <Checkbox value={item.id} key={item.key}>
        {item.name}
      </Checkbox>
    );
    return '';
  });
  return options;
}

const pageStyle = { width: '100%', textAlign: 'center' }


function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
  });
}


export {
  openNotification, getNowDate, getDate, pageStyle,
  getDateHHMM, getDateHHMMYY_HHMMSS, getDateYYYYMM, getDateYYYYwo, getDateByString, getOptionList,
  getRadioList, getCheckboxList, getStringByDate, getFirstDayOfTheMonth, getLastDayOfTheMonth,
  getDayAll, getMonthAll, getTime, getBase64, getDayTime, getDayByTime, randomString, debounce, throttle
};
